home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 09 Application Software / GC1.SDA / FILE MAINT (.txt) < prev    next >
Commodore BASIC  |  2019-04-13  |  9KB  |  338 lines

  1. 10 REM FILE MAINTENANCE
  2. 20 REM WRITTEN BY KURT BRANDON
  3. 30 DEFFNDS(R)=(R-INT(R))
  4. 40 DN=PEEK(186):REM DRIVE ADDRESS
  5. 50 POKE53281,1:POKE646,0:POKE650,255:RT$=CHR$(13):D$="":S$="":M$="":I$=""
  6. 60 BF$="                              "
  7. 70 PRINTCHR$(142)"[147]";
  8. 80 PRINT"[146]     [144]ucccccccccccccccccccccccccci"
  9. 90 PRINT"     b FILE MAINTENANCE PROGRAM b"
  10. 100 PRINT"     b                          b"
  11. 110 PRINT"     b           FOR            b"
  12. 120 PRINT"     b                          b"
  13. 130 PRINT"     b LATITUDE & LONGITUDE FILEb"
  14. 140 PRINT"     jffffffffffffffffffffffffffk"
  15. 150 DIMOP$(300):Z$=CHR$(0)
  16. 160 FORI=49152TO49703:READA:POKEI,A:NEXT
  17. 170 DATA169,0,141,35,194,32,175,193,176,79,32,90,192,32,230,192,32
  18. 180 DATA120,193,32,139,193,32,158,192,32,250,192,173,33,194,208,3,76
  19. 190 DATA47,192,173,34,194,208,3,76,47,192,32,25,193,32,101,193,176
  20. 200 DATA3,76,22,192,173,19,194,133,3,173,20,194,133,4,173,35,194
  21. 210 DATA208,8,32,120,193,32,159,193,176,11,169,0,141,35,194,32,139
  22. 220 DATA193,76,22,192,96,160,4,177,251,141,18,194,24,165,251,105,5
  23. 230 DATA133,251,165,252,105,0,133,252,172,18,194,136,240,16,24,165,251
  24. 240 DATA105,2,133,251,165,252,105,0,133,252,136,208,240,56,165,251,233
  25. 250 DATA1,133,3,141,19,194,165,252,233,0,133,4,141,20,194,32,0
  26. 260 DATA226,142,39,194,96,173,21,194,141,23,194,141,25,194,173,22,194
  27. 270 DATA141,24,194,141,26,194,14,23,194,46,24,194,24,173,23,194,109
  28. 280 DATA25,194,141,23,194,173,24,194,109,26,194,141,24,194,24,165,3
  29. 290 DATA105,3,133,3,165,4,105,0,133,4,24,165,3,109,23,194,133
  30. 300 DATA5,165,4,109,24,194,133,6,96,160,1,177,251,141,27,194,141
  31. 310 DATA31,194,136,177,251,141,28,194,141,32,194,96,160,0,177,3,141
  32. 320 DATA33,194,177,5,141,34,194,200,177,3,133,98,177,5,133,100,200
  33. 330 DATA177,3,133,99,177,5,133,101,96,173,39,194,41,1,201,0,240
  34. 340 DATA4,32,233,193,96,160,0,177,98,209,100,144,23,208,22,200,204
  35. 350 DATA34,194,144,10,173,34,194,205,33,194,208,8,240,5,204,33,194
  36. 360 DATA144,227,96,169,1,141,35,194,32,79,193,96,160,0,177,3,153
  37. 370 DATA36,194,177,5,145,3,185,36,194,145,5,200,192,3,144,237,96
  38. 380 DATA206,29,194,208,3,206,30,194,173,30,194,201,255,240,2,24,96
  39. 390 DATA56,96,78,32,194,110,31,194,173,31,194,141,21,194,173,32,194
  40. 400 DATA141,22,194,96,56,173,27,194,237,21,194,141,29,194,173,28,194
  41. 410 DATA237,22,194,141,30,194,96,173,22,194,208,9,173,21,194,201,0
  42. 420 DATA208,2,56,96,24,96,165,47,164,48,133,251,132,252,32,139,176
  43. 430 DATA160,0,177,251,197,69,240,9,200,208,247,230,252,208,243,56,96
  44. 440 DATA200,208,2,230,252,177,251,197,70,208,230,192,0,208,2,198,252
  45. 450 DATA136,152,24,101,251,133,251,144,2,230,252,24,96,160,0,177,100
  46. 460 DATA209,98,144,23,208,22,200,204,33,194,144,10,173,33,194,205,34
  47. 470 DATA194,208,8,240,5,204,34,194,144,227,96,169,1,141,35,194,32
  48. 480 DATA79,193,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  49. 490 DATA0,0,0,0,0,0,0,0
  50. 500 FC$="A"
  51. 510 OPEN15,DN,15,"I0"
  52. 520 OPEN8,DN,8,FC$
  53. 530 RN=1:GOSUB1530
  54. 540 INPUT#8,MN
  55. 550 GOSUB1540
  56. 560 CLOSE8
  57. 570 PL$=STR$(MN):IFRN=1THENLA=0:LO=0
  58. 580 PRINT"[147]NUMBER OF FILE RECORDS:";MN
  59. 590 PRINT"[144]RECORD NUMBER";RN
  60. 600 PRINT"[144]PLACE: "PL$"[144]"
  61. 610 Q$="N":IFLA<0THENQ$="S"
  62. 620 PRINT"LATITUDE: "TAB(11)ABS(LA)TAB(24)Q$;:RV=LA
  63. 630 GOSUB3200:PRINTTAB(28)""RV$"[144]"
  64. 640 Q$="W":IFLO<0THENQ$="E"
  65. 650 PRINT"LONGITUDE: "TAB(11)ABS(LO)TAB(24)Q$;:RV=LO
  66. 660 GOSUB3200:PRINTTAB(28)""RV$"[144]"
  67. 670 GOSUB2660
  68. 680 POKE198,0
  69. 690 GETA$:IFA$=""THEN690
  70. 700 IFA$="[196]"THEND$="_":FJ=MN+-RN:GOSUB2660:GOSUB1230:GOSUB2810:GOTO580
  71. 710 IFA$="S"THENGOSUB1670:GOTO520
  72. 720 IFA$="+"ANDRN<MNTHENRN=RN+1:GOSUB2810:GOTO580
  73. 730 IFA$="-"ANDRN>1THENRN=RN-1:GOSUB2810:GOTO580
  74. 740 IFA$="Q"THENCLOSE8:CLOSE15:LOAD"MENU",DN
  75. 750 IFNS=1THENNS=0:GOSUB2810:GOTO580
  76. 760 IFA$="V"THENSV=RN:INPUT"WHAT RECORD NUMBER";RN:GOSUB2810:GOTO580
  77. 770 IFA$="E"THENGOSUB1780:GOSUB2810:GOTO580
  78. 780 IFA$<>"C"THEN820
  79. 790 INPUT"FIRST LETTER";FC$:FC$=LEFT$(FC$,1)
  80. 800 IFFC$<"A"ORFC$>"Z"THENPRINT"[145][145]":GOTO790
  81. 810 GOTO520
  82. 820 IFA$="I"THENI$="_":GOSUB2660:GOSUB2280:GOSUB2810:GOTO580
  83. 830 GOTO690
  84. 840 CLOSE8:OPEN8,DN,8,FC$
  85. 850 PRINT"";
  86. 860 FORL=2TOMN-1
  87. 870 PRINT"[145]     [157][157][157][157][157]"INT(100*(L/(MN-1)));
  88. 880 PRINT"% DONE"
  89. 890 RN=L
  90. 900 GOSUB1530
  91. 910 INPUT#8,LV$,A1,O1
  92. 920 A1$=STR$(A1):O1$=STR$(O1)
  93. 930 SV$=LV$
  94. 940 GOSUB1540
  95. 950 LR=0
  96. 960 FORN=L+1TOMN
  97. 970 RN=N
  98. 980 GOSUB1530
  99. 990 INPUT#8,PL$,W$,Y$:W=VAL(W$):Y=VAL(Y$)
  100. 1000 GOSUB1540
  101. 1010 IFPL$<SV$THENLR=RN:SV$=PL$
  102. 1020 NEXTN
  103. 1030 IFLR=0THEN1170
  104. 1040 RN=LR
  105. 1050 GOSUB1530
  106. 1060 INPUT#8,PL$,A2$,O2$:A2=VAL(A2$):O2=VAL(O2$)
  107. 1070 A2$=STR$(A2):O2$=STR$(O2)
  108. 1080 GOSUB1540
  109. 1090 RC$=LV$+RT$+A1$+RT$+O1$
  110. 1100 PRINT#8,RC$;
  111. 1110 GOSUB1540
  112. 1120 RN=L:RC$=""
  113. 1130 GOSUB1530
  114. 1140 RC$=PL$+RT$+A2$+RT$+O2$
  115. 1150 PRINT#8,RC$;
  116. 1160 GOSUB1540
  117. 1170 NEXTL
  118. 1180 S$="":CLOSE8:GOSUB2660:RETURN
  119. 1190 :
  120. 1200 :
  121. 1210 :
  122. 1220 REM\ DELETE ENTRY SUB
  123. 1230 CLOSE8
  124. 1240 PRINT"";
  125. 1250 IFRN=1THENPRINT"[145]FILE POINTER RECORD![144]":D$="":RETURN
  126. 1260 OPEN8,DN,8,FC$
  127. 1270 CR=RN:FORBG=CRTOMN
  128. 1280 PRINT"[145]     [157][157][157][157][157]"INT(100*((BG-CR)/((MN-CR)-(MN=CR))));
  129. 1290 PRINT"% DONE[144]"
  130. 1300 RN=BG+1
  131. 1310 IFRN>MNTHEN1420
  132. 1320 GOSUB1530:REM CALCULATE POINTER
  133. 1330 INPUT#8,PL$,LA$,LO$:LA=VAL(LA$):LO=VAL(LO$)
  134. 1340 GOSUB1550:REM CHK ERR CHAN
  135. 1350 GOSUB1540:REM POSITION
  136. 1360 LA$=STR$(LA):LO$=STR$(LO)
  137. 1370 RC$=PL$+RT$+LA$+RT$+LO$
  138. 1380 RN=BG
  139. 1390 GOSUB1530:GOSUB1530
  140. 1400 PRINT#8,RC$;
  141. 1410 GOSUB1540
  142. 1420 NEXT
  143. 1430 RN=1:MN=MN-1
  144. 1440 GOSUB1530
  145. 1450 MN$=STR$(MN):RC$=MN$+RT$
  146. 1460 PRINT#8,RC$;
  147. 1470 GOSUB1540
  148. 1480 D$="":RN=CR:CLOSE8:GOSUB2660:RETURN
  149. 1490 :
  150. 1500 :
  151. 1510 :
  152. 1520 REM\ POSITION & ERROR SUB
  153. 1530 RH=INT(RN/256):RL=RN-(256*RH)
  154. 1540 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1)
  155. 1550 INPUT#15,E,E$,A,B
  156. 1560 IFE=0THENRETURN
  157. 1570 IFE=50THEN RETURN
  158. 1580 PRINT"I/O ERROR"
  159. 1590 PRINT"ERROR NUMBER IS";E,E$
  160. 1600 PRINT"AT TRACK";A;"   SECTOR";B
  161. 1610 CLOSE8:CLOSE15:END
  162. 1620 :
  163. 1630 :
  164. 1640 :
  165. 1650 :
  166. 1660 REM\ SORT FILE RECORDS SUB
  167. 1670 OP$(0)=Z$:OP$(1)=Z$:FORI=2TO300:OP$(I)="":NEXT
  168. 1680 OPEN8,DN,8,FC$:RN=1:GOSUB1530:GOSUB1540:INPUT#8,MN
  169. 1690 FORRN=2TOMN:GOSUB1530:GOSUB1540:INPUT#8,PL$,LA$,LO$
  170. 1700 OP$(RN)=PL$+RT$+LA$+RT$+LO$:NEXT
  171. 1710 SYS49152OP$(1),2
  172. 1720 FORRN=2TOMN:GOSUB1530:GOSUB1540
  173. 1730 PRINT#8,OP$(RN);:NEXT:CLOSE8:RETURN
  174. 1740 :
  175. 1750 :
  176. 1760 :
  177. 1770 REM\ EDIT SUB
  178. 1780 CE=0:BL=10:NL=10:PRINT"[147]PLACE: "PL$
  179. 1790 Q$="N":IFLA<0THENQ$="S"
  180. 1800 PRINT"LATITUDE: "TAB(12)LATAB(24)Q$;:RV=LA
  181. 1810 GOSUB3200:PRINTTAB(28)""RV$"[144]"
  182. 1820 Q$="W":IFLO<0THENQ$="E"
  183. 1830 PRINT"LONGITUDE: "TAB(12)LOTAB(24)Q$;:RV=LO
  184. 1840 GOSUB3200:PRINTTAB(28)""RV$"[144]"
  185. 1850 PRINT"        - RECORD NOW IN FILE -"
  186. 1860 INPUT"CHANGE PLACE NAME  N[157][157][157]";CH$
  187. 1870 IFCH$<>"N"ANDCH$<>"Y"THENPRINT"[145][145]":GOTO1860
  188. 1880 IFCH$="N"THENPQ$=PL$:GOSUB3300:GOTO1960
  189. 1890 CE=1:INPUT"PLACE:";PQ$
  190. 1900 IFLEN(PQ$)<=30THEN1930
  191. 1910 PRINT"MORE THAN 30 CHARACTERS":FORI=1TO900:NEXT
  192. 1920 GOSUB3300:GOTO1890
  193. 1930 IFLEFT$(PQ$,1)=" "THENPQ$=RIGHT$(PQ$,LEN(PQ$)-1):GOTO1930
  194. 1940 IFLEN(PQ$)<30THENPQ$=PQ$+LEFT$(BF$,30-LEN(PQ$))
  195. 1950 GOSUB3300
  196. 1960 SA=LA:INPUT"CHANGE LATITUDE? N[157][157][157]";CH$
  197. 1970 IFCH$<>"N"ANDCH$<>"Y"THENPRINT"[145][145]":GOTO1960
  198. 1980 IFCH$="N"THENGOSUB3300:GOTO2000
  199. 1990 CE=1:PRINT"LATITUDE":GOSUB2910:IF NV=1THENSA=RV
  200. 2000 SA$=STR$(SA):SA$=SA$+LEFT$(BF$,11-LEN(SA$))
  201. 2010 GOSUB3300
  202. 2020 SO=LO:INPUT"CHANGE LONGITUDE  N[157][157][157]";CH$
  203. 2030 IFCH$<>"N"ANDCH$<>"Y"THENPRINT"[145][145]":GOTO2020
  204. 2040 IFCH$="N"THENGOSUB3300:GOTO2060
  205. 2050 CE=1:SO=LO:PRINT"LONGITUDE":GOSUB2910:IF NV=1THENSO=RV
  206. 2060 SO$=STR$(SO):SO$=SO$+LEFT$(BF$,11-LEN(SO$))
  207. 2070 PRINT:PRINT:PRINT"PLACE: "PQ$
  208. 2080 Q$="N":IFVAL(SA$)<0THENQ$="S"
  209. 2090 PRINT"LATITUDE: "TAB(12)SA$TAB(24)Q$;:RV=VAL(SA$)
  210. 2100 GOSUB3200:PRINTTAB(28)""RV$"[144]"
  211. 2110 Q$="W":IFVAL(SO$)<0THENQ$="E"
  212. 2120 PRINT"LONGITUDE: "TAB(12)SO$TAB(24)Q$;:RV=VAL(SO$)
  213. 2130 GOSUB3200:PRINTTAB(28)""RV$"[144]"
  214. 2140 PRINT"[144]-- IS THIS INFORMATION CORRECT (Y/N)? --"
  215. 2150 GETA$:IFA$<>"Y"ANDA$<>"N"THEN2150
  216. 2160 IFA$="N"THEN1780
  217. 2170 IFCE=0THENRETURN
  218. 2180 RC$=PQ$+RT$+SA$+RT$+SO$
  219. 2190 OPEN8,DN,8,FC$
  220. 2200 GOSUB1530
  221. 2210 PRINT#8,RC$;
  222. 2220 GOSUB1550:GOSUB1540
  223. 2230 CLOSE8:RETURN
  224. 2240 :
  225. 2250 :
  226. 2260 :
  227. 2270 REM\ INSERT RECORD SUB
  228. 2280 OPEN8,DN,8,FC$
  229. 2290 TN=RN:FORXD=MNTOTNSTEP-1
  230. 2300 PRINT"";
  231. 2310 PRINTINT(100*((MN-XD)/(MN-TN-(MN=TN))))" % DONE"
  232. 2320 RN=XD
  233. 2330 GOSUB1530
  234. 2340 INPUT#8,PL$,LA$,LO$:LA=VAL(LA$):LO=VAL(LO$)
  235. 2350 GOSUB1550
  236. 2360 GOSUB1540
  237. 2370 LA$=STR$(LA):LO$=STR$(LO)
  238. 2380 RC$=PL$+RT$+LA$+RT$+LO$
  239. 2390 RN=XD+1
  240. 2400 GOSUB1530
  241. 2410 PRINT#8,RC$;
  242. 2420 GOSUB1550
  243. 2430 GOSUB1540
  244. 2440 NEXT
  245. 2450 MN=MN+1
  246. 2460 RN=1
  247. 2470 GOSUB1530
  248. 2480 MN$=STR$(MN)
  249. 2490 RC$=MN$+RT$
  250. 2500 PRINT#8,RC$;
  251. 2510 GOSUB1550
  252. 2520 RN=TN
  253. 2530 PL$="                              ":LO=0:LA=0
  254. 2540 LA$=STR$(LA):LO$=STR$(LO)
  255. 2550 RC$=PL$+RT$+LA$+RT$+LO$
  256. 2560 GOSUB1530
  257. 2570 PRINT#8,RC$;
  258. 2580 GOSUB1550
  259. 2590 GOSUB1540
  260. 2600 CLOSE8
  261. 2610 I$="":RETURN
  262. 2620 :
  263. 2630 :
  264. 2640 :
  265. 2650 REM\ MENU DISPLAY SUB
  266. 2660 PRINT" [196][144] DELETE";D$
  267. 2670 PRINT" S[144] SORT";S$
  268. 2680 PRINT" +[144] NEXT RECORD"
  269. 2690 PRINT" -[144] PREVIOUS RECORD"
  270. 2700 PRINT" Q[144] QUIT"
  271. 2710 PRINT" V[144] VIEW SPECIFIC RECORD"
  272. 2720 PRINT" E[144] EDIT DISPLAYED RECORD"
  273. 2730 PRINT" I[144] INSERT RECORD"I$
  274. 2740 PRINT" C[144] SELECT FILE (A-Z)"
  275. 2750 RETURN
  276. 2760 :
  277. 2770 :
  278. 2780 :
  279. 2790 :
  280. 2800 REM\ DATA INPUT SUB
  281. 2810 OPEN8,DN,8,FC$
  282. 2820 GOSUB1530:IFE<>50THEN2840
  283. 2830 RN=SV:PRINT"THIS RECORD IS NOT PRESENT":FORI=1TO2000:NEXT:CLOSE8:RETURN
  284. 2840 INPUT#8,PL$,LA$,LO$:LA=VAL(LA$):LO=VAL(LO$)
  285. 2850 GOSUB1540:CLOSE8
  286. 2860 RETURN
  287. 2870 :
  288. 2880 :
  289. 2890 :
  290. 2900 REM\      INPUT SUB
  291. 2910 S$="":CC=0:DP=0:MP=0:SP=0:HM=0:DM=0:SG=1
  292. 2920 DEFFNVC(X)=(X>=48ANDX<=57)OR(X=78ORX=83ORX=69ORX=87ORX=58ORX=20ORX=13ORCV=46)
  293. 2930 NV=0
  294. 2940 FORKI=0TO30
  295. 2950 IFKI=0THENPRINT" [146][157]";
  296. 2960 IFKI=15THENPRINT" [157]";
  297. 2970 GETA$:IFA$<>""THENGOTO2990
  298. 2980 NEXTKI:GOTO2940
  299. 2990 CV=ASC(A$):IFFNVC(CV)=0THENGOTO2940
  300. 3000 IFCV=13ORCV=20THENPRINT" [157]";
  301. 3010 IFCV<>13ANDCV<>20THENNV=1:CC=CC+1:PRINTA$;:IFCV<>58THENS$=S$+A$
  302. 3020 IFCC=0THENGOTO3060
  303. 3030 IFCV<>20THENGOTO3060
  304. 3040 FORKI=1TOCC:PRINT"[157]";:NEXT:FORKI=1TOCC:PRINT"[160]";:NEXT:FORKI=1TOCC:PRINT"[157]";:NEXT
  305. 3050 GOTO2910
  306. 3060 IFCV=58ANDDM=0THENDP=VAL(S$):DM=1:S$="":GOTO2940
  307. 3070 IFCV=58ANDDM=1THENMP=VAL(S$):DM=2:S$="":GOTO2940
  308. 3080 IFDM=1ANDCV=13THENMP=VAL(S$):S$="":GOTO3130
  309. 3090 IFDM=2ANDCV=13THENSP=VAL(S$):S$="":GOTO3130
  310. 3100 IFCV=78ORCV=87THENSG=1:CV=58:GOTO3060
  311. 3110 IFCV=83ORCV=69THENSG=-1:CV=58:GOTO3060
  312. 3120 IFCV=78ORCV=87ORCV=83ORCV=69THENSP=VAL(S$)
  313. 3130 IFCV=13AND(DM=1ORDM=2)THENRV=(DP+MP/60+SP/3600)*SG:RETURN
  314. 3140 IFCV=13ANDDM=0THENRV=VAL(S$)*SG:RETURN
  315. 3150 GOTO2940
  316. 3160 :
  317. 3170 :
  318. 3180 :
  319. 3190 REM\  DEGREES-MINUTES-SECONDS SUB
  320. 3200 RV=ABS(RV)
  321. 3210 DP=INT(RV):MP=60*FNDS(RV):MP=INT(MP+.5):DM=1
  322. 3220 RV$=STR$(DP)+"[188]"+STR$(MP)+"'":RETURN
  323. 3230 :
  324. 3240 :
  325. 3250 :
  326. 3260 REM\ PARTIAL SCREEN CLEAR
  327. 3270 REM   KK,KL,KM=STORAGE
  328. 3280 REM   BL=IS BEGINNING LINE NUMBER
  329. 3290 REM   NL=NUMBER OF LINES TO CLEAR
  330. 3300 KK=PEEK(781):KL=PEEK(782):KM=PEEK(783)
  331. 3310 FORI=BLTOBL+NL
  332. 3320 POKE781,I:POKE782,0:POKE783,0
  333. 3330 SYS65520:SYS59903
  334. 3340 NEXT
  335. 3350 POKE781,KK:POKE782,KL:POKE783,KM
  336. 3360 POKE214,BL:PRINT
  337. 3370 RETURN
  338.